Maniac_91, бред полный NightCrawler, и получаем багоюз со стопом атаки (но всё остальное правильно)
надо юзать ддс
подробнее в статьях
а вообще походу кое кто копипастит зив
Патиссончик, про центр области не заметил
точка каждый раз создаётся заново и это утечка Патиссончик, есть прога на сайте для записи логов
так же есть дебаг через прелоад на сайте
вот счётчик утечек
При конвертации моделей из игр в MDX их вес велик как и вес их текстур ! Я оптимизирую и сжимаю модель через MDLvis а текстуры через BLP Laboratory но их вес все еще внушителен ( Есть ли другие варианты среза веса без дефектов материала ?
Нет. Только удаление лишних анимаций. Остальную оптимизацию веса сделает mdlvis.
При импорте некоторых моделей в карту возникает проблема с их выбором при манипуляции ( Передвижения ) словно их Выбор отсутствует , Думаю некоторые с подобным сталкивались ...
Если модель нельзя выделить в игре курсором, у неё отсутствуют collision shapes (формы коллизии). Их можно добавить в War3ModelEditor -> Окна -> Редактор узлов -> правый клик -> Создать форму - > отредактировать размеры и положение. Их можно добавить несколько, чтобы покрыть модель целиком. Они отвечают за взаимодействие модели с курсором.
Один ресурс - один вопрос, после пойдут замечания.
Лимит операций, обычно это беда настигает заядлых гуишников.
На jass обычно нету таких проблем.
Создайте таймер с периодом .00 сек и запускайте им функции инициализации триггеров.
функция типа InitTrig_Имя триггера - это функция инициализации триггера, она вызывается из функции InitCustomTriggers, но если этих вызовов очень много то функция упирается в лимит операций и поток завершается так и не создав все триггеры.
Ещё камера может двигаться по высоте ландшафта и не перекрываясь многими игровыми объектами, что помешают виду. Это следующие два действия за тем, что во втором примере.
судя по всему фатал вызывает то что функция function PC_action берёт юнита хотя должна быть
function PC_action takes nothing returns nothing
странно что редактор ошибку не выдал
джнгп используешь?
и запомни функции которые вызываются :
TriggerAddAction
ForGroup
и прочими должны быть takes nothing returns nothing
исключение: функции вызываемые из Condition которые должны takes nothing returns boolean плохо читал статьи или не все прочитал а только базовый курс 2005 года
Starman2222, брали гуишный код и конвертили в джасс
узнав основы синтаксиса таким образом переходили к функциям
открывали комон и близард джи и изучали функции
ключевой вещью был мозг
без него ты даже 1 пункт не осилишь
теперь же есть статьи которые снижают время на изучение
но всё ещё требуют мозг
в общем если мозг есть то читай статьи
а если нету то займись чем нибудь полезным для общества
Создаешь две переменные - TempPoint (тип - точка), TempUnit (тип - боевая единица)
Событие - Приводит способность в действие
Условие - Применяемая способность = "Твоя способность"
Действия:
TempPoint = позиция применяющего юнита
TempUnit = Создать твоего дамми в TempPoint
Создать таймер смерти для TempUnit на 1.0 секунд
Заставить юнита выполнить приказ (тут уже сам разберешься)
Custom Script'ом вводишь код: call RemoveLocation(udg_TempPoint)
А вообще, если у тебя более-менее серьезный проект, то советую перейти на Джасс, ибо на ГУИ в картах ниже быстродействие из-за дополнительных вызовов через БЖ-функции, а также утечки, которые как ни крути не устранишь полностью. Да и сам Джасс гораздо удобнее и функциональнее
Я бы начал с проверки фильтров и условий выводом текстовых сообщений на экран, чтобы убедиться в том, что гребёт только одного.
Скорее всего не обновляется выбранный юнит во втором цикле, я по крайней мере не вижу ни массива, ни другого механизма передачи позиции следующего юнита.
Когда просто запускаю твою карту, то всё нормально, но если внесу изменения и пересохраняю, даже просто пересохраняю, то она перестаёт загружаться в игре, может быть ты какую-то защиту ставил? Я планировал сделать видимой модель дамми, так как работник несёт ресурсы не в ратушу, а справа от неё, то есть предположительно дамми на свободном месте, но при этом работник ополченцем не становится. Да и вообще как-то глючно работает. Ратуша начальная не улучшается компьютером, только ратуши у новых рудников, работник может добывать дерево у нового рудника, но нести его к начальной базе, хотя только что перед этим носил на базу рядом с новым рудником. Короче, глючное какое-то поведение - надо бы видеть модель дамми.
P. S. Создал карту, куда скопировал дамми, дал ему видимую модель и начал проверять. Действительно не выполняется "К оружию", если юнит над Ратушей, но если ей дать меньшую карту путей, то способность срабатывает, немного другая карта путей, но того же размера у Обсерватории-она тоже не работает. Много всего перепробовал поменять в редакторе объектов, но никак не получалось сделать призыв работающим. Тогда я из блокираторов путей решил попробовать сделать рабочую карту путей, вот каким работающий вариант получился:
Для сравнения поместил рядом ратушу. Синий цвет у карты путей обозначает, что нельзя строить, розовый, что нельзя строить и ходить. Нам важен лишь розовый цвет. Опытным путём определил, что необходимо сделать не розовым второй квадратик в правом верхнем углу сверху, необязательно тот, что у меня отсутствует, можно и тот, который выделил. Можно и больше убрать, у меня показан необходимый минимум.
То есть надо сделать новую карту путей для Ратуши/Крепости/Замка. Новые карты путей я не делал, потому не подскажу более, но есть ссылка на статью:
Заботься о чистоте когда. Любой скриптовой язык пишется для удобства программиста, производительность это не главная вещь, о которой в нем нужно задумываться.
Что за visual code? Чтобы тестирование не запускалось в оконном режиме, убери отсюда галку:
Visual Studio Code
Wurst работает с кодом карты и РО из внешнего текстового редактора, на WE остается переключаться разве что ради ландшафта. Это к тому, что JNGP или SharpCraft с Wurst используются не часто.
Лимит операций, обычно это беда настигает заядлых гуишников.
На jass обычно нету таких проблем.
Создайте таймер с периодом .00 сек и запускайте им функции инициализации триггеров.
функция типа InitTrig_Имя триггера - это функция инициализации триггера, она вызывается из функции InitCustomTriggers, но если этих вызовов очень много то функция упирается в лимит операций и поток завершается так и не создав все триггеры.
Тестил, тестил. Думал найду ошибку. Короче не знаю в чем дело, видимо и в правду баг. Решил по-другому. Ловить поставку, и ловить продажу. То есть ловить то, что пришло, и то, что ушло.
событием - "юнит закладывает в лавку" (EVENT_PLAYER_UNIT_PAWN_ITEM) ловим продажу итемов.
GetSellingUnit() =продающий торговец (типа всякие предметы закладывает в магазин и получает деньги)
GetBuyingUnit()=GetTriggerUnit() = покупающий торговец (это обычно магазин)
событием - "юнит закладывает из лавки (продает артефакт)" (EVENT_PLAYER_UNIT_SELL_ITEM) ловим покупку итемов
GetSellingUnit()=GetTriggerUnit()=продающий торговец (обычно это магазин)
GetBuyingUnit() = покупающий торговец (наш герой получает артефакты)
Решил, я по-своему. Короче, видимо, итем в магазине исчезает при добавлении. Попробовал запоминать все добавленные итемы, и при добавлении я сначала удалю всё в магазине, а потом заново добавлю. Пришлось, еще порядок (номер слотов) запоминать, а то строятся ключи хэша на строгом порядке. Если возьму и заберу итем посередине, придется заново выстраивать порядок. Не знаю, пока тестил много времени, пока без косяков. Главное, что работает. Меня это радует. Но пока не буду спешить. Мне бы хотелось затестить норм.
Как объединить зелья лечения в одно с зарядом, если герой имеет одно в инвентаре и поднимает второе?
обычно используют "событие - юнит получает предмет", И на предмет, который вы получаете, ссылается переменная, которая называется item being manipulated. А юнит, который получает итем - Triggering Unit. Вы можете с помощью этой переменной итема узнать тип, сравнить. Потом циклом пробегаете по слотам (от 1 до 6), тут вся суть в одной команде триггерной (item in slot X, итем в слоте Х) и проверяете есть ли такой же итем (не забываем делать проверки, на то что этот предмет не равен item being manipulated и сравниваете не одинаковые ли типы). Если есть такой же (находите тот же тип что и item being manipulated), то от item being manipulated берете заряды и прибавляете к зарядам существующего, а потом item being manipulated удаляете. Недостаток: при заполненном инвентаре такая штука не будет работать.Не хватает свободного места.
код
цикл А от 1 до 6
if тип итема (item being manipulated) РАВНО тип итема (item in slot А) and item being manipulated НЕ РАВНО item in slot А then проверяете
set k = Charges remaining in ( item being manipulated) + Charges remaining in ( item in slot А) складываете заряды
Set charges remaining in ( item in slot А) to ( k) устанавливаете кол-во зарядов
Remove Item (item being manipulated) удаляете
endif
Есть гуишная проверка на наличие итема определенного типа в инвентаре, но она утечна. И лучше циклом прогонять.
Кстати выше пример, там вот дропают итем, зачем? чтобы проверить есть ли такой же итем. А то мб проверка на наличие итема определенного типа в инвентаре найти подобранный итем. А нам нужно знать, что есть еще один, кроме подобранного. Поэтому дропают. Только не понятно зачем создаете новый итем.
Проверка, на то что подобранный предмет имеет зарядов больше 0, говорит нам о том что это не обычный предмет.
есть статьи
Как зелье с зарядом разделить, если игрок перекладывает зелье с зарядом в другую ячейку инвентаря, если возможно, то разделение происходить должно только при нажатии какой-то клавиши?
можно перекладывать в другой слот. для этого ловят приказ. Короче смотрите системы CCS
там создают новый такой же предмет, и выделяют кол-во зарядов, деля поровну например. Абилкой например, попробуй сделать целевую активную абилку с целью предмет, указывай на инвентарь и дели.
Как это можно сделать покороче для множества разных типов предметов?
всмысле покороче? сделать под одну группу? есть же классификация. Я вот делаю так, что все предметы, которые с зарядами, должны иметь классификацию "с зарядами". Не помню точно как называется класс итемов.
Как правильно реализовать в инвентаре 7 слот?
если у героя заполнен инвентарь, то он может подобрать руну. Вот в доте система скрещивания. То же самое можно сделать и с зарядами. На земле у него лежат руны, при подборе руна исчезает. Но мы проверяем слоты, есть ли такой итем. Если есть, прибавляем заряды к существующему. Иначе создать новый. При дропе итема, оригинал подменяет снова на руну. В руну можно передать значения зарядов.
А также ограничения какие-то на количество зарядов нужно ставить или сама система выше какой-то планки не даст собирать?
до такого не доходил.
скинул примеры (хотя многие дурацкие, но делал здесь хгм в качестве ответов)
вот еще одна система hh
В последней сборке JNPG:R pjass.exe очень странный, сам добавляет Condition() там, где их нет и пр.
Это легко исправить, скачай последний pjass.exe и замени оригинальный файл в папке jasshelper, которая в папке JNPG. Есть ещё сборка R3 у меня, а также оригинальные JNPG, могу кинуть.
Чтобы при подборе меча игрались анимации для меча - можно укзать
Анимация - add animation tag to unit - first например. Будут проигрываться attack first, walk first и т.д. При отсутствии таковых будут играться бестеговые анимации.
Теги не какие попало добавляются, насколько я помню.
Используемые теги: fast, victory, first, second,third, fourth, fifth, swim, ready, alternate.
gabriel_fisher, скорее всего, тебе нужны анимационные теги
теги бывают разные: alternate, gold, lumber, defend, flesh и др
например, у рабочего есть анимации attack, walk, death и если ему добавить тег lumber, тогда вместо этих анимаций будут проигрываться attack lumber, walk lumber и death lumber соответственно.
Берем основную модель, возможно, вообще без мяса, только с гусеницами, но с кучей точек крепления. Также берем кучу моделей-аттачметов, представляющих собой эти самые пушки, корпуса и все прочее. При выборе характеристик модели через диалог или интерфейс соответственно создаем на основной модели эффекты-аттачменты, будет собрана техника. Такие штуки, как двигатель и прочие невидные извне элементы будут скорее входить в математическую модель юнита, но это также можно запилить. Название танка - сразу не скажу, есть ли триггер на смену, но на таблице рекордов можно отобразить что угодно.
2.Тоже можно.
Создаем погодный в определенной местности и делаем два триггера для контроля входа-выхода юнитов из нее. На искомых юнитов применяем нужные способности - и все готово.
Здесь чуть сложнее: нужно постоянно проверять тип местности под юнитом, но тоже можно. Проверка на ограждения тоже может бить сделана.
4.Это уже интереснее. Видел раньше подобное в играх. При каждой атаке юнита случайным образом наносим или не наносим доп. урон, эффект горения, кидаем спелл на цель в зависимости от теоретического места попадания атаки.
5.И это можно. Но нужно писать нестандартную систему Альянса. Но через триггеры и JASS все можно...
Продажа техники - лучше через способность, что бы кидать ее на понравившегося юнита, не стоит покупать кота в мешке. Стоимость должна зависеть от технического уровня юнита, его текущего состояния (мертвый танк попадет вам бесплатно, сами чините!), если он был модернизован дополнительно, то это тоже входит в стоимость. Разрешение на продажу делаем аналогично.
Это легко через Custom Value и переменние.
Как ты понял, все что ты предложил создать можно, но на это нужно потрать хороший кусок времени. Остается пожелать тебе удачи над созданием проекта - мне идея уже нравится.
Происходящее здесь напомнило мне один случай из моего далекого прошлого. В те времена я еще только начинал осваивать редактор. Одна из тем, которая меня заинтересовала и по которой мне не удалось найти достаточно полной информации - утечки. Тогда я пошел на один форум и задал простой вопрос о том, как определить наличие и степень серьезности утечек в карте, не перебирая весь код. В результате я получил тонну флуда и "ответ от профи", с которым все в итоге согласились - фрагмент кода с ценным указанием "если это число растет быстро - утечек много, если медленно - мало или нет вовсе". Код представлял из себя таймер с малым периодом, который создавал объект, брал его хендл, писал в чат и удалял объект, но был один нюанс - создаваемый объект утекал на каждой итерации таймера.
Пока нет желания разбираться, что у тебя так, а что не так. Но вижу, что переменная Window не назначена окну, а ещё как бы создаются в цикле одновременно 10 окон, которые потом все одновременно ждут 50 секунд. Вот скрин действий триггера вместо двух твоих, секунда ожидания поставлена для того, чтобы увидеть пропадание окна таймера.
avuremybe, не обращай на него внимание
он сам не понимает что пишет avuremybe, можешь впихнуть в карту счётчик утечек и проверить
или создать 100500 таймеров и посмотреть как изменился объём затраченной оперативы
Мб это негейшин (амулет защиты) из него мона делать пассивку с кулдауном, для активации кастануть даммиком какойнить скилл в юнита с негейшином, будет кд.
Потом как кд пройдет негейшин удалить и добавить пассивку, ну и так далее.
У пассивок кроме креста перерождения и эксгумации труповозки нет кулдауна, ну совсем нет! Так что берем перерождение и рисуем на нем кулдаун мемхаком, а чем эффект крита или блока изображаем триггерно ну или вручаем, удаляем эти пассивки в заблочннном спелбуке юниту.
лучше при изучении способности на первом уровне создать триггер, реагирующий только на событие unit атакован (или получает урон, что там тебе надо) для изучившего
тогда триггер будет гораздо меньше нагружать игру
Существуют оригинал и их копия - руна. Руна пропадает при ее подборе или покупки.
В магазине и на земле лежат руны.
Каждый раз когда дропают с инвентаря оригинал, то пикают все итемы на карте и подменяют на руны. В нее можно передавать заряды. Однако, происходит это не сразу. Но этого можно не заметить
При получении руны сама руна исчезает. Короче можно узнать тип руны (ид). Проверяем различные связки скрещивания итемов (циклом пробегаем, какие итемы есть в инвентаре героя). Есть не идет одна связка, то следующую связку проверяем, если и эта не идет, то следующую. И так далее, если все связки не прокатили, то возвращаем оригинал. Если это зарядовые итемы (бутылочки всякие), то можно складывать. Кстати сам манипулирующий итем удаляем
есть еще такие хитрости когда связка должна иметь две одинаковые пары носков и одну пару ботинков. Нужно циклом перечитывать сколько одинаковых итемов лежит в инвентаре
есть в гуи проверка, что герои имеет итем определенного типа. Но некуда не годится это. Во-первых, тут утечка - необнуленная локалка. И во-вторых, это пункт 5, то что выше (когда нужно проверить, есть ли два одинаковых итема. Это делается циклом).
то что скинул, это просто пример для новичков. когда то сам с этого начинал
Не берите вы эти ульты для основы своих скиллов, они сделаны через одно место лиж бы работали в капмании, а там дальше хоть потоп.
Сделайте заклинание из канала, а юнитов вокруг делайте неуязвимыми.
NiktoTakoy, заполнить всю карту водой
потом поднять уровень земли (вода исчезнет)
после чего триггерно опускать уровень земли в нужном месте (модификаторы рельефа смотри)
в результате в тех местах где опустили уровень рельефа возникнет вода
В редакторе существует максимальная высота рельефа, и минимальная высота рельефа, и за пределы этих ограничителей никакой Zephyr не вылезает. Кстати, Zephyr не может влиять на код, ЕМНИП.
Нужно отредактировать файл MiscData, чтобы создавать более крутые склоны (тогда зависимость высоты от размера кисти уменьшится).
А именно строку "MaxSlope=50" на "MaxSlope=90".
// blizzard.j:1772
function GetRectCenter takes rect whichRect returns location
return Location(GetRectCenterX(whichRect), GetRectCenterY(whichRect))
endfunction
а эвент регистрируется 1 раз, так что можно забить
// blizzard.j:7959
function TriggerRegisterEnterRectSimple takes trigger trig, rect r returns event
local region rectRegion = CreateRegion()
call RegionAddRect(rectRegion, r)
return TriggerRegisterEnterRegion(trig, rectRegion, null)
endfunction
Другое дело, что у order есть утечка, но это нативно, она минимальная и это никак не исправляется.
Даешь одиннадцатому игроку видимость над всей картой. Даешь нужным боевым единицам радиус агрессии на всю карту.
Если не работает, то: Во время спавна мобов даешь им приказ атаковать ближайшего героя, если ЛЮБОЙ герой умер, повторяешь это действие.
Если юнит манипулирует когтями
Выкинуть когти
Если юнит манипулирует когтями
Поднять когти
Удалить когти
Удалить когти
Создать нужный предмет
P.S. Неужели планируешь создать свою Goblin Survival? Пересекались на боте, может помнишь меня. Ты еще грузился по несколько лет в карту и назвал меня школьником, лол.
// blizzard.j:1772
function GetRectCenter takes rect whichRect returns location
return Location(GetRectCenterX(whichRect), GetRectCenterY(whichRect))
endfunction
а эвент регистрируется 1 раз, так что можно забить
// blizzard.j:7959
function TriggerRegisterEnterRectSimple takes trigger trig, rect r returns event
local region rectRegion = CreateRegion()
call RegionAddRect(rectRegion, r)
return TriggerRegisterEnterRegion(trig, rectRegion, null)
endfunction
Другое дело, что у order есть утечка, но это нативно, она минимальная и это никак не исправляется.
подобных систем 100500 же
да и делается изи
атачим к юниту его точку респавна (для тех у кого боязнь джасса можно юзать кастом вэлью)
когда юнит умирает то извлекаем приатаченную точку и запускаем вейт
по окончанию вейта создаём юнита в точке и атачим к нему эту точку
на гуи это 2 триггера
если хочется оптимально то стоит перейти на джасс и не насиловать себе мозги этими окошками
Реализовать триггерно. Если это не очевидно - значит твои навыки не позволяют сделать этого. Однако спелл простой - поищи где-нибудь в заклинаниях на заказ или на хайве.
Убери прирост характеристик, а стартовую характеристику поставь на 1. В игровом интерфейсе и константах можно переписать названия статистик, или убрать с их любой смысл, сделав прирост атаки за ед статы к 0 и т.д.
Иконку тоже можно изменить.
ии я очень сложный замутил 4х ступенчатый (не для босов)так как при строительстве его я думал что движок будет пулять спеллы,его придёться переписывать,но я нашел решение если за моба стоит комп то спелы во вкладке нейтрально посивные он будет юзать но не все главное условие чтобы был комп назначен
Если первый кадр анимации правильный, попробуйте удалить последний кадр анимации, потом скопировать кадр в её начале (Именно через команду "Кадры" - "Копировать (Ctrl + C)" !) и вставить его в конец. То же самое проделать с другой анимацией (Stand 2). Если это не поможет, тогда надо детально смотреть саму модель, что с ней не так. И ещё советую сохранять промежуточные версии модели, чтоб можно было сделать "откат", если возникнут ошибки.
Модель битая или текстуры не в соответствующем качестве. Раздел текстур модели вроде бы прописан верно. Количество текстур и пути тоже в порядке. Но не импортируется как должно. Замени модель на другую.
Попробуй эту версию
Да, эта работает. В анимации stand видимость была не задана. Да там собственно и анимаций никаких нет.
Но выглядит она как-то не красиво. Второй вариант (1а) получше- тектстуры ОК
Вот он
Разумеется можно, но лишь те у которых есть кулдаун индикатор, это перерождение и вроде абилка труповозки "эксгумация".
Так же желательно юзать новую функцию запуска в кд, некоторые абилки у меня баговали, целая тема была про это.
» WarCraft 3 / Инвентарь персонажа
» WarCraft 3 / Как оптимизировать карту?
» WarCraft 3 / Плавная камера и World Editor...
» WarCraft 3 / Jass тригеры
» WarCraft 3 / Дамми
» WarCraft 3 / Wurst
» WarCraft 3 / Кампании на 1.30
» WarCraft 3 / JASS создание и удаление эффекта
» WarCraft 3 / Система стана
» WarCraft 3 / Проблема с JNGP
» WarCraft 3 / Как сменить анимацию Атаки?
» WarCraft 3 / Не могу найти модель юнита
» WarCraft 3 / 2 вопроса на разные темы
» WarCraft 3 / Таймер
» WarCraft 3 / Как сделать пассивку?
» WarCraft 3 / Руны
» WarCraft 3 / Случайный спавн игроков
» WarCraft 3 / Совет для новичка
» WarCraft 3 / Уровень рельефа
» WarCraft 3 / Мобы 2
» WarCraft 3 / Мобы
» WarCraft 3 / Убрать ману
» WarCraft 3 / Очередные баги в анимации
» WarCraft 3 / Как поставить другую текстуру для модели?
» WarCraft 3 / Мемхак